#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
薪资数据分析工具
对采集的薪资数据进行深度分析和可视化
"""

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
import os
import glob

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False

class SalaryAnalyzer:
    def __init__(self):
        self.data = None
        
    def load_salary_data(self, file_path=None):
        """加载薪资数据"""
        if file_path is None:
            # 查找最新的薪资数据文件
            salary_files = glob.glob('data/salary/*.csv')
            if not salary_files:
                print("❌ 未找到薪资数据文件")
                return False
            file_path = max(salary_files, key=os.path.getctime)
        
        try:
            self.data = pd.read_csv(file_path, encoding='utf-8-sig')
            print(f"✅ 成功加载薪资数据: {file_path}")
            print(f"📊 数据条数: {len(self.data)}")
            return True
        except Exception as e:
            print(f"❌ 加载数据失败: {e}")
            return False
    
    def basic_analysis(self):
        """基础数据分析"""
        if self.data is None:
            print("❌ 请先加载数据")
            return
        
        print("\n📈 基础薪资数据分析")
        print("=" * 50)
        
        # 基本统计
        salary_col = '平均薪资(K)'
        if salary_col in self.data.columns:
            stats = self.data[salary_col].describe()
            print(f"📊 薪资统计信息:")
            print(f"  平均薪资: {stats['mean']:.1f}K")
            print(f"  薪资中位数: {stats['50%']:.1f}K")
            print(f"  最低薪资: {stats['min']:.1f}K")
            print(f"  最高薪资: {stats['max']:.1f}K")
            print(f"  标准差: {stats['std']:.1f}K")
        
        # 按工作经验分析
        if '工作经验' in self.data.columns:
            print(f"\n📊 按工作经验分析:")
            exp_analysis = self.data.groupby('工作经验')[salary_col].agg(['mean', 'median', 'count']).round(1)
            for exp, stats in exp_analysis.iterrows():
                print(f"  {exp}: 平均{stats['mean']}K, 中位数{stats['median']}K ({int(stats['count'])}个样本)")
        
        # 按学历分析
        if '学历要求' in self.data.columns:
            print(f"\n🎓 按学历要求分析:")
            edu_analysis = self.data.groupby('学历要求')[salary_col].agg(['mean', 'median', 'count']).round(1)
            for edu, stats in edu_analysis.iterrows():
                print(f"  {edu}: 平均{stats['mean']}K, 中位数{stats['median']}K ({int(stats['count'])}个样本)")
        
        # 按公司规模分析
        if '公司规模' in self.data.columns:
            print(f"\n🏢 按公司规模分析:")
            size_analysis = self.data.groupby('公司规模')[salary_col].agg(['mean', 'count']).round(1)
            for size, stats in size_analysis.iterrows():
                print(f"  {size}: 平均{stats['mean']}K ({int(stats['count'])}个样本)")
    
    def generate_report(self):
        """生成分析报告"""
        if self.data is None:
            print("❌ 请先加载数据")
            return
        
        report_content = []
        report_content.append("# 毕业生薪资数据分析报告")
        report_content.append(f"生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        report_content.append(f"数据条数: {len(self.data)}")
        report_content.append("")
        
        # 基础统计
        salary_col = '平均薪资(K)'
        if salary_col in self.data.columns:
            stats = self.data[salary_col].describe()
            report_content.append("## 薪资概况")
            report_content.append(f"- 平均薪资: {stats['mean']:.1f}K")
            report_content.append(f"- 薪资中位数: {stats['50%']:.1f}K")
            report_content.append(f"- 薪资范围: {stats['min']:.1f}K - {stats['max']:.1f}K")
            report_content.append("")
        
        # 工作经验分析
        if '工作经验' in self.data.columns:
            report_content.append("## 按工作经验分析")
            exp_analysis = self.data.groupby('工作经验')[salary_col].agg(['mean', 'count']).round(1)
            for exp, stats in exp_analysis.iterrows():
                report_content.append(f"- {exp}: 平均{stats['mean']}K ({int(stats['count'])}个样本)")
            report_content.append("")
        
        # 学历分析
        if '学历要求' in self.data.columns:
            report_content.append("## 按学历要求分析")
            edu_analysis = self.data.groupby('学历要求')[salary_col].agg(['mean', 'count']).round(1)
            for edu, stats in edu_analysis.iterrows():
                report_content.append(f"- {edu}: 平均{stats['mean']}K ({int(stats['count'])}个样本)")
            report_content.append("")
        
        # 热门技能
        if '技能要求' in self.data.columns:
            report_content.append("## 热门技能统计")
            all_skills = []
            for skills in self.data['技能要求'].dropna():
                all_skills.extend([skill.strip() for skill in skills.split(',')])
            
            from collections import Counter
            skill_counts = Counter(all_skills)
            top_skills = skill_counts.most_common(10)
            
            for skill, count in top_skills:
                report_content.append(f"- {skill}: {count}次")
            report_content.append("")
        
        # 保存报告
        os.makedirs('reports', exist_ok=True)
        timestamp = datetime.now().strftime('%Y%m%d_%H%M')
        report_file = f'reports/薪资分析报告_{timestamp}.md'
        
        with open(report_file, 'w', encoding='utf-8') as f:
            f.write('\n'.join(report_content))
        
        print(f"📄 分析报告已生成: {report_file}")
        return report_file

def main():
    """主函数"""
    print("📊 薪资数据分析工具")
    print("=" * 30)
    
    analyzer = SalaryAnalyzer()
    
    # 加载数据
    if analyzer.load_salary_data():
        # 基础分析
        analyzer.basic_analysis()
        
        # 生成报告
        analyzer.generate_report()
        
        print(f"\n✅ 分析完成！")
    else:
        print("❌ 数据加载失败")

if __name__ == '__main__':
    main()
